package com.faral.JWOL;

import java.sql.*;
import java.util.*;
import java.util.Date;



public class DbAccessor {
	XmlRW rXml = new XmlRW();
	String fileXML="c:\\JWOL\\config.xml"; //inserire qui il file XML
	String valoreHost = rXml.leggiXml(fileXML, "host");
	String valoreUser = rXml.leggiXml(fileXML, "user");
	String valorePassword = rXml.leggiXml(fileXML, "password");
	String valoreDB = rXml.leggiXml(fileXML, "db");

	Date dataCorrente = new Date();
    
    String stringaUscita = dataCorrente.toString();
	
	
	
	// ATTRIBUTI 
	java.sql.Connection dbConnection;
	private String connectionString = "";
	
	// METODI ACCESSORI
	public void setConnectionString(String connectionString) {
		this.connectionString = connectionString;
	}
	public String getConnectionString() {
		return connectionString;
	}
	
	// COSTRUTTORI
	public DbAccessor() {
		connectionString = "jdbc:mysql://"+ valoreHost +"/"+ valoreDB +"";
		
	}
	
	public DbAccessor(String p_connectionString) {
		connectionString = p_connectionString;
	}
	
	
	// METODI 
	public void openConnectionToDB() {
		
		try {
			// allocazione del driver
			Class.forName ("com.mysql.jdbc.Driver").newInstance();

			// creazione della connessione
			dbConnection = DriverManager.getConnection(
					connectionString,
					valoreUser,
					valorePassword);
			
		}
		catch (ClassNotFoundException cnfe) {
			System.out.println("Driver not found!");
			System.out.println(cnfe.getMessage());
		}		
		catch (SQLException sqle) {
			System.out.println("Conessione al DB non riuscita!");
			System.out.println(sqle.getMessage());
		}
		catch (Exception e) {
			// gestire errore insolito
			System.out.println(e.getMessage());
		}
	} // end method
	
	public void closeConnectionToDB() {
		try {
			dbConnection.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} // end method
	
	// METODI PER LA RICERCA
	public ResultSet selectAll() {
		
		// imposta la query
		String sql_selectAll = "SELECT * FROM anag";
		
		// dichiara un resultSet
		ResultSet rs = null;

		try {
			// crea lo statement associato alla query			
			PreparedStatement comando = dbConnection.prepareStatement(sql_selectAll);
			
			// esegue la query
			rs = comando.executeQuery();			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("ANALISI DELL'ERRORE");
			System.out.println(e.getMessage());
			System.out.println("FINE ANALISI DELL'ERRORE");
			//e.printStackTrace();
			
		}
		
		// ritorna il risultato
		return rs;
	} // end method
	
	public ResultSet selectByChiave(
			String p_nomeChiave,
			String p_valoreChiave) {
		
		// imposta la query con il nome del campo usato come chiave
		String sql_selectByKey = "SELECT * FROM anag WHERE ("+p_nomeChiave+" = ?)";
		
		// dichiara un resultSet
		ResultSet rs = null;
		
		try {
			// crea lo statement associato alla query			
			PreparedStatement comando = dbConnection.prepareStatement(sql_selectByKey);
			
			// inserisce il parametro
			comando.setString(1, p_valoreChiave);
			
			// esegue la query
			rs = comando.executeQuery();			
			
			
			
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("ANALISI DELL'ERRORE");
			System.out.println(e.getMessage());
			System.out.println("FINE ANALISI DELL'ERRORE");
			//e.printStackTrace();
			
		}
		
		// ritorna il risultato
		return rs;
	} // end method
	
	
	
	// DELETE
	public int deleteRecord() {
		// imposta la query con il nome del campo usato come chiave
		String sql_delete = 
			"DELETE FROM sched WHERE type = 'M'";
		
		int resInt = 0;
		
		try {
			// crea lo statement associato alla query			
			PreparedStatement comando = dbConnection.prepareStatement(sql_delete);
			
			// inserisce il parametro
			
			//comando.setInt(1, p_ID);
			
			// esegue la query
			 resInt = comando.executeUpdate();			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("ANALISI DELL'ERRORE");
			System.out.println(e.getMessage());
			System.out.println("FINE ANALISI DELL'ERRORE");
			//e.printStackTrace();
			
		}
		
		return resInt;
	}
	
	
public ResultSet selectsched(String p_date, String p_day, String p_time1, String p_time2) {
		
		// imposta la query
		//String sql_selectAll = "SELECT * FROM sched where data='" + p_date + "' and hour >='"+ p_time1 +"' and hour <='" + p_time2 + "' or data='" + p_day + "' and hour >='"+ p_time1 +"' and hour <='" + p_time2 + "'";
		String sql_selectAll ="SELECT * FROM sched where (data='" + p_date + "' or data='" + p_day + "') and hour >='"+ p_time1 +"' and hour <='" + p_time2 + "'";
		//System.out.println(sql_selectAll);
		// dichiara un resultSet
		ResultSet rs = null;

		try {
			// crea lo statement associato alla query			
			PreparedStatement comando = dbConnection.prepareStatement(sql_selectAll);
			
			// esegue la query
			rs = comando.executeQuery();			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("ANALISI DELL'ERRORE");
			System.out.println(e.getMessage());
			System.out.println("FINE ANALISI DELL'ERRORE");
			//e.printStackTrace();
			
		}
		
		// ritorna il risultato
		return rs;
	} // end method
	
	
	
	
// DELETE
public int insertLog(String p_user, String p_mac, String p_note) {
	// imposta la query con il nome del campo usato come chiave
	String sql_insert = "insert Into log values(now(),'"+ p_user +"','"+p_mac+"','"+p_note+"')";
	
	int resInt = 0;
	
	try {
		// crea lo statement associato alla query			
		PreparedStatement comando = dbConnection.prepareStatement(sql_insert);
		
		// inserisce il parametro
		
		//comando.setInt(1, p_ID);
		
		// esegue la query
		 resInt = comando.executeUpdate();			
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		System.out.println("ANALISI DELL'ERRORE");
		System.out.println(e.getMessage());
		System.out.println("FINE ANALISI DELL'ERRORE");
		//e.printStackTrace();
		
	}
	
	return resInt;
}


	
	
	
} // end class
